#!/usr/bin/env bash

set -E

DIRS="syntax indent compiler autoload ftplugin ftdetect after/syntax after/indent after/ftplugin after/ftdetect"

download() {
  for pack in $1; do
    path="$(printf "$pack" | cut -d ':' -f 2)"
    dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
    rm -rf "$dir"
    (git clone -q --recursive "https://github.com/$path.git" "$dir" && printf '.') &
  done

  wait
}

extract() {
  printf "\n"
  for pack in $1; do
    name="$(printf "$pack" | cut -d ':' -f 1)"
    path="$(printf "$pack" | cut -d ':' -f 2)"
    dir="tmp/$(printf "$path" | cut -d '/' -f 2)"
    printf -- "- [$name](https://github.com/$path) ("

    subdirs=""
    for subdir in $DIRS; do
      if [ -d "$dir/$subdir" ]; then
        base="$(basename "$subdir")"
        if [[ "$subdirs" != *"$base"* ]]; then
          subdirs="$subdirs, $base"
        fi

        copy_dir "$dir" "$subdir"
      fi
    done


    printf "${subdirs##, })\n"
  done

  for pack in $1; do
    name="$(printf "$pack" | cut -d ':' -f 1)"
    path="$(printf "$pack" | cut -d ':' -f 2)"
    dir="tmp/$(printf "$path" | cut -d '/' -f 2)"

    if [ -d "$dir/plugin" ]; then
      printf "Possible error (plugin directory exists): $path\n"
    fi
  done
}

copy_dir() {
  for file in $(find "$1/$2" -name '*.vim'); do
    file_path="$(dirname "${file##$1/}")"
    mkdir -p "$file_path"
    touch "$file_path/$(basename "$file")"
    cat $file >> $file_path/$(basename "$file")
  done
}

concat_ftdetect() {
  cat ftdetect/* | grep -E '^[^"]' > tmp/polyglot.vim
  rm -f ftdetect/*
  mv tmp/polyglot.vim ftdetect/
}

PACKS="
  arduino:sudar/vim-arduino-syntax
  c++11:octol/vim-cpp-enhanced-highlight
  c/c++:vim-jp/cpp-vim
  clojure:guns/vim-clojure-static
  coffee-script:kchmck/vim-coffee-script
  csv:chrisbra/csv.vim
  cucumber:tpope/vim-cucumber
  dockerfile:honza/dockerfile.vim
  elixir:elixir-lang/vim-elixir
  erlang:oscarh/vimerl
  git:tpope/vim-git
  go:jnwhiteh/vim-golang
  haml:tpope/vim-haml
  handlebars:mustache/vim-mustache-handlebars
  haskell:travitch/hasksyn
  html5:othree/html5.vim
  jade:digitaltoad/vim-jade
  javascript:pangloss/vim-javascript
  json:leshill/vim-json
  jst:briancollins/vim-jst
  latex:LaTeX-Box-Team/LaTeX-Box
  less:groenewege/vim-less
  markdown:tpope/vim-markdown
  nginx:mutewinter/nginx.vim
  ocaml:jrk/vim-ocaml
  octave:vim-scripts/octave.vim--
  opencl:petRUShka/vim-opencl
  perl:vim-perl/vim-perl
  php:StanAngeloff/php.vim
  puppet:ajf/puppet-vim
  protobuf:uarun/vim-protobuf
  python:vim-scripts/python.vim--Vasiliev
  r-lang:vim-scripts/R.vim
  rspec:sheerun/rspec.vim
  ruby:vim-ruby/vim-ruby
  rust:wting/rust.vim
  sbt:derekwyatt/vim-sbt
  scala:derekwyatt/vim-scala
  slim:slim-template/vim-slim
  stylus:wavded/vim-stylus
  textile:timcharper/textile.vim
  tmux:acustodioo/vim-tmux
  tomdoc:duwanis/tomdoc.vim
  typescript:leafgarland/typescript-vim
  vbnet:vim-scripts/vbnet.vim
  twig:beyondwords/vim-twig
  xls:vim-scripts/XSLT-syntax
  yard:sheerun/vim-yardoc
  css-color:gorodinskiy/vim-coloresque
"

rm -rf tmp
rm -rf $DIRS
mkdir tmp

printf "Downloading packs..."
download "$PACKS"
extract "$PACKS"
concat_ftdetect

rm -rf tmp
